package TopOneHundred;

import java.net.Inet4Address;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;

/**
 * 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。
 * 如果没有任何一种硬币组合能组成总金额，返回 -1。
 * 你可以认为每种硬币的数量是无限的
 * 输入：coins = [1, 2, 5], amount = 11
 * 输出：3
 * 解释：11 = 5 + 5 + 1
 * @author le
 */
public class CoinChange
{
    List<List<Integer>> res = new LinkedList<>();

    public static void main(String[] args)
    {
        CoinChange change = new CoinChange();
        int[] coins = {1, 6, 5};
        int amount = 11;
        System.out.println(change.coinChange(coins, amount));
    }

    public int coinChange(int[] coins, int amount) {
        Arrays.sort(coins);
        List<Integer> res = new ArrayList<>();
        int len = coins.length-1;
        int sum = amount - coins[len];





        return res.size();
    }

    public void backtrack(LinkedList<Integer> tmp,int target,int[] coins){
        if (target < 0){
            return;
        }
        if (target == 0){
            res.add(new LinkedList<>(tmp));
            return;
        }
        for (int i = 0;i < coins.length;i++){
            if (tmp.contains(coins[i])){
                continue;
            }
            tmp.add(coins[i]);
            backtrack(tmp, target-coins[i],coins);
            tmp.removeLast();
        }
    }


}
